串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS) | 您所在的位置:网站首页 › 汇编语言lods byte ptr › 串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS) |
串操作指令(MOVS/CMPS/SCAS/LODS/STOS)的使用: 1.串传送指令 使用 上述三种格式的串传送指令在执行前都需要预先设置地址指针DS:SI和ES:DI,设置传送方向,如果要重复执行, 还需把重复次数放入CX并使用重复前缀。 MOVS指令常与重复前缀REP联合使用,以简化程序,提高程序运行速度。 将2000H:1200H地址开始的200个字节传送到6000H:2000H开始的存储单元中。 程序段如下: MOV AX,2000H MOV DS,AX ;设置源串段地址 MOV AX,6000H MOV ES,AX ;设置目的串段地址 MOV SI,1200H ;设置源串偏移地址 MOV DI,2000H ;设置目的串偏移地址 MOV CX,100 ;串长度送CX CLD ;DF←0,方向为从低地址到高地址 REP MOVSB ;每次传送一个字节,并自动修改地址指针及CX内容 ;若修改后CX≠0就重复执行 2.串比较指令CMPS 比较字符串STR1和字符串STR2是否相同,如果不同,将STR1中不相等字符的地址送BX。两个字符串的长度均为200个字节。 程序如下:(假定DS和ES已设置好) LEA SI,STR1 ;SI←源串首地址 LEA DI,STR2 ;DI←目的串首地址 MOV CX,200 ;CX←串长度
CLD ;DF←0,增地址方向
REPZ CMPSB ;对两个串逐个字符进行比较,直到遇到不同的字符或比较完
JZ STOP ;若所有字符都相同,则转STOP DEC SI ;否则,使SI指向不相等的字符(CMPS指令已对SI自动加1) MOV BX,SI ;BX←不相等单元的地址 STOP: 3.串扫描指令SCAS
从ES:2000H单元开始存放了一个长度为100的字符串,寻找其中有无字符“S”。若有则记下扫描次数(次数放CNT单元),并记下存放“A”的地址(地址放ADDR单元)。程序段如下: MOV DI,2000H ;DI←目的串首地址 MOV CX,100 ;CX←串长度 MOV AL,"S" ;AL←关键字“S” CLD ;DF←0,增地址方向 REPNZ SCASB ;扫描字符串,直到找到“S”或扫描结束 JZ FOUND ;若找到则转移
MOV DI,0 ;没找到,使DI=0 JMP DONE FOUND:DEC DI ;使DI指向找到的“S”字符(SCAS指令已对DI自动加1) MOV ADDR,DI ;将“S”字符的地址送ADDR单元 SUB DI,2000H ;用“S”字符的地址减去首地址得到扫描次数 DONE:MOV CNT,DI ;将搜索次数送CNT单元 4.串装入指令LODS . 使用 上述三种格式的串装入指令在执行前都需要预先设置源串指针DS:SI和方向标志DF。LODS指令一般不使用重复前缀,因为每重复一次AL或AX中内容将被后一次所装入的字符所取代,前一次装入的内容被覆盖。 以MEM1为首地址的存储器中有10个字节数据,编写程序将这10个数都乘2。 (假定DS已设置好) LEA SI,MEM1 ;SI←源串首地址 MOV CX,10 ;CX←串长度 CLD ;DF←0 NEXT:LODSB ;取一个数据到AL ADD AL,AL ;乘2 MOV [SI-1],AL ;存回去 ;SI需要减一切记 DEC CX ;CX←CX-1 JNZ NEXT ;CX≠0则继续 5.串存储指令STOS
使用 上述三种格式的串存储指令在执行前都需要预先设置AL(或AX)、目的串指针DS:SI和方向标志DF。利用重复前缀REP,可对连续的存储单元写入相同的值。 本指令常用于对某一存储区域进行初始化(初值在放AL(AX)中)。 把6000H:1200H开始的100个字节存储单元全部设置为55H。 MOV AX,6000H MOV ES,AX ;ES←目的串的段地址 MOV DI,1200H ;DI←目的串的偏移地址 MOV CX,100 ;CX←串长度 CLD ;DF←0,增地址方向
MOV AL,55H ;AL←55H REP STOSB ;将100个单元都写入55H |
CopyRight 2018-2019 实验室设备网 版权所有 |